'''
Created on 2014年9月4日

@author: loseair123

支持动态绑定属性
'''
class Student(object):
    def __init__(self,name,sid,score):
        self.name=name
        self.sid=sid
        self.score=score
    def printInfo(self):
        print('Name:',self.name,'Id:',self.sid,'Score:',self.score)

    def getGrade(self):
        if self.score>85:
            print('A')
        elif self.score>75:
            print('B')
        elif self.score>60:
            print('C')
        else:
            print('F')


eko=Student('eko','a0133748',88)
eko.getGrade()
eko.printInfo()
'''
如果要让内部属性不被外部访问，可以把属性的名称前加上两个下划线__，在Python中，实例的变量名如果以__开头，
就变成了一个私有变量（private），只有内部可以访问，外部不能访问，所以，我们把Student类改一改：
'''
eko.age=22
print(eko.age)#动态绑定属性

class Lectrue(object):
    def __init__(self,name,time,lid,professorName):
        self.__name=name
        self.__time=time
        self.__lid=lid
        self.__professorName=professorName
    def printInfo(self):
        print (self.__name, self.__time,self.__lid,self.__professorName)
        #print '%s: %s' % (self.__name, self.__time)
        
computer_network=Lectrue('advanced computer network','Friday','CS5555','Richard')
#print(computer_network.name)
computer_network.printInfo()

#多态与继承
class Animal(object):
    def __init__(self,name,food):
        self.name=name
        self.food=food
    def run(self):
        print(self.name,'is running!')
    def eat(self):
        print(self.name,'is eating',self.food)

class Dog(Animal):
    pass
class Cat(Animal):
    pass

dog=Dog('dog','bone')
cat=Cat('cat','mouse')
dog.eat()
cat.eat()

def animalEat(Animal):
    Animal.eat()

animalEat(dog)

#dir 用于显示对象中的所有属性和方法
print(dir(Animal))